查看原文
其他

技术文档丨如何为Apollo安装低时延/实时内核

阿波君 Apollo开发者社区 2022-07-29


本文档描述了在Ubuntu 18.04上安装低时延(Low-Latency) 或实时 (Realtime)内核及Nvidia驱动的步骤。



  ENJOY THE FOLLOWING  




仅在实车上运行Apollo软件栈才需要低时延或实时内核。如果您的目的只是基于Apollo平台开发/测试您的算法,或者运行仿真软件(如Lgsvl模拟器),则可能您根本不需要安 装这里描述的低时延或实时内核。




Ubuntu软件仓库中的低时延内核足以为实车上运行Apollo提供低(或者零)时延。在其 内核配置中,任务抢占式(PREEMPT)优化是开启了的,时延可低至0.1毫秒。


下面是安装Ubuntu低时延内核的步骤:


1. 安装最新的低时延内核及其头文件。


1sudo apt-get update
2sudo apt-get install linux-image-$(uname -r)-lowlatency linux-headers-$(uname -r)-lowlatency

<左右滑动以查看完整代码>

注意:


如果在执行了sudo apt-get update后通过apt list --upgradable查看有新版本内核 ,请将上述命令中的$(uname -r)改为Ubuntu软件仓库中最新的内核版本号。截至本 文写作时(2020 年 12 月 2 日),Ubuntu软件仓库中的最新内核是5.4.0-56。


2. 重启系统以启动低时延内核。


sudo reboot

<左右滑动以查看完整代码>




请按照ROS2:构建实时Linux中描述的步骤来构建和安装最新的稳定版实时内核。虽然该文档是按照Ubuntu 20.04来讲的,但其中的步骤完全适用于Ubuntu 18.04。



对Ubuntu低时延内核而言,安装Nvidia驱动的步骤比较简单:


1. 从CUDA Toolkit下载页下载并安装Nvidia最新驱动。


在选择安装类型(Installer Type)时,建议选择本地安装(deb[local]) 或者网络安装(deb[network]) 模式。



注意:


可能需要注册并签署CUDA最终用户使用协议(EULA)才可以下载Nvidia驱动及CUDA安装包。


比如,如下是在x86_64架构的Ubuntu 18.04.5上通过本地安装Deb软件包的方式 安装Nvidia驱动:


1wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
2sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
3wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda-repo-ubuntu1804-11-1-local_11.1.1-455.32.00-1_amd64.deb
4sudo dpkg -i cuda-repo-ubuntu1804-11-1-local_11.1.1-455.32.00-1_amd64.deb
5sudo apt-key add /var/cuda-repo-ubuntu1804-11-1-local/7fa2af80.pub
6sudo apt-get update
7sudo apt-get install nvidia-driver-455

<左右滑动以查看完整代码>


注意:


nvidia-driver-XXX的数字应该与CUDA本地安装包中的数字一致。本例中是455。


2. 重启系统。


3. 运行nvidia-smi检查是否生效。


请先按照低时延内核Nvidia驱动的安装方法完成 Nvidia 驱动的初步安装。请注意,由于 Nvidia 驱动不支持实时内核,所以在上面执行sudo apt-get install nvidia-driver-455的步骤时会报如下错误消息:


1The kernel you are installing for is a PREEMPT_RT kernel!
2
3The NVIDIA driver does not support real-time kernels. If you
4are using a stock distribution kernel, please install
5a variant of this kernel that does not have the PREEMPT_RT
6patch set applied; if this is a custom kernel, please
7install a standard Linux kernel.  Then try installing the
8NVIDIA kernel module again.
9
10*** Failed PREEMPT_RT sanity check. Bailing out! ***

<左右滑动以查看完整代码>


我们可以通过在编译Nvidia驱动的时候设置 IGNORE_PREEMPT_RT_PRESENCE=1 来绕过这 一点。


步骤如下:


1. 运行如下命令来编译Nvidia驱动:


1# 切换到Nvidia 驱动的源码目录
2cd "$(dpkg -L nvidia-kernel-source-455 | grep -m 1 "nvidia-drm" | xargs dirname)"
3
4# 设置 IGNORE_PREEMPT_RT_PRESENCE=1 来编译Nvidia 驱动
5sudo env NV_VERBOSE=1 \
6make -j8 NV_EXCLUDE_BUILD_MODULES='' \
7KERNEL_UNAME=$(uname -r) \
8IGNORE_XEN_PRESENCE=1 \
9IGNORE_CC_MISMATCH=1 \
10IGNORE_PREEMPT_RT_PRESENCE=1 \
11SYSSRC=/lib/modules/$(uname -r)/build \
12LD=/usr/bin/ld.bfd \
13modules
14
15sudo mv *.ko /lib/modules/$(uname -r)/updates/dkms/
16sudo depmod -a

<左右滑动以查看完整代码>


2. 重启系统。


3. 运行nvidia-smi来检查Nvidia驱动是否正常工作。




如有需要,可按照《ESD-CAN 安装说明》(链接见文末)来编译安装ESD-CAN驱动。



*《ESD-CAN 安装说明》

https://github.com/ApolloAuto/apollo-kernel/blob/master/linux/ESDCAN-README.md


以上是“如何为Apollo安装低时延/实时内核”的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存